/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package command;

import beans.ListeFlux;
import beans.ListeNouvelles;
import beans.ListeSuivis;
import beans.ListeTagNouvelle;
import beans.NouvelleBean;
import beans.TagNouvelleBean;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.*;

/**
 * @author Antonin Mozzati
 * @author Yannick Schürter
 */
public class AbonnementsCommand implements Command {

    @Override
    public String getCommandName() {
        return "abonnementsCommand";
    }

    @Override
    public ActionFlow actionPerform(HttpServletRequest request) {
        String vue = "abonnements";
        String erreur = "erreur";

        System.out.println("Abonnements page");

        if (request.getParameter("addNouvelleSubmit") != null) {
            ListeNouvelles listeNouvelles;
            ListeTagNouvelle listeTagNouvelle;
            try {
                // On récupère la liste de flux du ServletContext
                listeNouvelles = (ListeNouvelles) request.getServletContext().getAttribute("listeNouvelles");
                // On récupère la liste de tags du ServletContext
                listeTagNouvelle = (ListeTagNouvelle) request.getServletContext().getAttribute("listeTagNouvelle");
            } catch (Exception ex) {
                Logger.getLogger(AbonnementsCommand.class.getName()).log(Level.SEVERE, null, ex);
                return new ActionFlow(erreur, erreur + ".html", true);
            }

            String titre = request.getParameter("titre");
            String texte = request.getParameter("texte");
            int id_flux = Integer.parseInt(request.getParameter("id_flux"));
            String[] tags = request.getParameter("tags").split(";");

            // si les formulaires ne sont pas remplis
            if (titre.equals("")) {
                request.setAttribute("erreur", "Erreur : la nouvelle doit avoir un titre.");
            } else {
                if (texte.equals("")) {
                    request.setAttribute("erreur", "Erreur : la nouvelle doit contenir un texte.");
                } else {
                    GregorianCalendar calendar = new GregorianCalendar();
                    String date = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH); //format AAAA-MM-JJ sous derby
                    NouvelleBean nb = new NouvelleBean(0, id_flux, 1, titre, texte, date);
                    int idNouvelle = listeNouvelles.addNouvelle(nb);
                    nb.setId_nouvelle(idNouvelle);
                    for (String tag : tags) {
                        if ((tag != null) && (!tag.equals(""))) {
                            listeTagNouvelle.addTagNouvelle(new TagNouvelleBean(0, tag), nb);
                        }
                    }
                }
            }
        } else if (request.getParameter("desaboSubmit") != null) {

            ListeSuivis listeSuivis;
            ListeFlux listeFlux;
            try {
                // On récupère la liste de suivis du ServletContext
                listeSuivis = (ListeSuivis) request.getServletContext().getAttribute("listeSuivis");
                // On récupère la liste de flux du ServletContext
                listeFlux = (ListeFlux) request.getServletContext().getAttribute("listeFlux");
            } catch (Exception ex) {
                Logger.getLogger(AbonnementsCommand.class.getName()).log(Level.SEVERE, null, ex);
                return new ActionFlow(erreur, erreur + ".html", true);
            }

            int id_flux;
            try {
                id_flux = Integer.parseInt(request.getParameter("id_flux"));
            } catch (NumberFormatException e) {
                id_flux = 0;
            }

            // Si le flux en paramètre est correct
            if (id_flux != 0) {
                int sessionID = (Integer) request.getSession().getAttribute("sessionID");
                listeSuivis.removeSuivi(id_flux, sessionID);
            }
        }
        return new ActionFlow(vue, vue + ".jsp", false);
    }
}
